package cn.class2.demo9

/**
  * Created by lzd on 2018/11/28.
  * scala 的泛型用 []
  * [T <: Comparable] 上界  upper bound
  * [T :> Comparable] 下界  lower bound
  * [T : Comparable]  上下文界定 context bound
  * [T % Comparable]  视图界定  view bound
  * [+T]  协变
  * [-T]  逆变
  */

//上界
class Demo[T <: Comparable[T]] {
  def bigger(a: T, b: T): T = {
    if (a.compareTo(b) > 0) a else b
  }
}

class Demo1[T <% Comparable[T]] {
  def bigger(a: T, b: T): T = {
    if (a.compareTo(b) > 0) a else b
  }
}

object Demo{
  def main(args: Array[String]): Unit = {
    //此时只能用Integer不能用int因为int没有实现comparable接口
    val d1 = new Demo[Integer]
    println(d1.bigger(123,456))

    //此时可以用int因为<%做了隐式转换 详见predef 中int2Integer
    val d2 = new Demo1[Int]
    println(d2.bigger(123,456))
  }
}
